"""
    面向对象：封装相关的注解
"""

class Person:
    def __init__(self, name):
        self.__name = name

    @property
    def eat(self):
        print(f"{self.__name} is eating......")

person = Person("张三")
# 将方法转成属性，可以直接像调属性一样的调用方法
person.eat


class Dog:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name

    @property
    def name(self):
        # 可以做一些逻辑处理
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        self.__age = age

dog = Dog("小白",6)
# 直接访问私有实例属性，异常
# print(dog.__name)
# 通过提供的方法来访问，方法被注解属性化了
print(dog.name)

# 通过封装的 setter 方法来修改，不提供就不能修改
dog.name = "小黑"
print(dog.name)
# 通过提供的方法来访问
print(dog.get_name())


